//package com.agent.service.impl;
//
//import com.agent.entity.CourseSchedule;
//import com.agent.service.PdfParserService;
//import org.apache.pdfbox.pdmodel.PDDocument;
//import org.apache.pdfbox.text.PDFTextStripper;
//import org.springframework.stereotype.Service;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.time.LocalTime;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//@Service
//public class SpecializedPdfParserService implements PdfParserService {
//
//    // 节次与时间映射
//    private static final String[][] TIME_SLOTS = {
//            {"1-2", "08:00", "09:40"},
//            {"3-4", "10:00", "11:40"},
//            {"5-6", "14:00", "15:40"},
//            {"7-8", "16:00", "17:40"},
//            {"9-10", "19:00", "20:40"},
//            {"9-11", "19:00", "21:20"},
//            {"9-12", "19:00", "22:00"},
//            {"5-7", "14:00", "16:30"}
//    };
//
//    // 星期映射
//    private static final String[] DAYS_OF_WEEK = {
//            "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"
//    };
//
//    public List<CourseSchedule> parsePdf(InputStream pdfStream) throws IOException {
//        List<CourseSchedule> courses = new ArrayList<>();
//
//        try (PDDocument document = PDDocument.load(pdfStream)) {
//            PDFTextStripper stripper = new PDFTextStripper();
//            String text = stripper.getText(document);
//
//            // 按行分割文本
//            String[] lines = text.split("\n");
//            String currentDay = "";
//            String previousLine = "";
//
//            for (int i = 0; i < lines.length; i++) {
//                String line = lines[i].trim();
//
//                // 检查是否是星期行
//                for (String day : DAYS_OF_WEEK) {
//                    if (line.startsWith(day)) {
//                        currentDay = day;
//                        previousLine = "";
//                        break;
//                    }
//                }
//
//                // 处理可能的多行课程信息
//                if (!currentDay.isEmpty()) {
//                    // 检查是否是节次行
//                    if (line.matches("^\\d+-\\d+\\s*$")) {
//                        // 这是节次行，可能下一行是课程信息
//                        if (i + 1 < lines.length) {
//                            String nextLine = lines[i + 1].trim();
//                            // 合并两行进行处理
//                            String combinedLine = line + " " + nextLine;
//                            CourseSchedule course = parseCourseLine(combinedLine, currentDay);
//                            if (course != null) {
//                                courses.add(course);
//                                i++; // 跳过下一行
//                            }
//                        }
//                    }
//                    // 检查是否是完整的课程行
//                    else if (line.matches("^\\d+-\\d+.*")) {
//                        CourseSchedule course = parseCourseLine(line, currentDay);
//                        if (course != null) {
//                            courses.add(course);
//                        }
//                    }
//                    // 检查是否是课程信息的延续行
//                    else if (!line.isEmpty() && previousLine.matches(".*\\d+-\\d+.*") &&
//                            (line.contains("周数:") || line.contains("地点:") || line.contains("教师:"))) {
//                        // 合并前一行和当前行
//                        String combinedLine = previousLine + " " + line;
//                        CourseSchedule course = parseCourseLine(combinedLine, currentDay);
//                        if (course != null) {
//                            courses.add(course);
//                            // 替换前一行，因为我们已经处理了它
//                            courses.remove(courses.size() - 2); // 移除前一行创建的课程
//                        }
//                    }
//
//                    previousLine = line;
//                }
//            }
//        }
//
//        return courses;
//    }
//
//    private CourseSchedule parseCourseLine(String line, String day) {
//        try {
//            // 使用更灵活的正则表达式匹配课程信息
//            // 匹配模式: 节次 课程名称 周数信息 校区信息 地点信息 教师信息
//            Pattern pattern = Pattern.compile(
//                    "(\\d+-\\d+)\\s+" + // 节次
//                            "([^/]+?)\\s+" +    // 课程名称(尽可能匹配，直到遇到斜杠)
//                            "周数:[^/]+/" +     // 周数信息
//                            "校区:[^/]+/" +     // 校区信息
//                            "地点:([^/]+)/" +   // 地点信息
//                            "教师:([^/]+)/"     // 教师信息
//            );
//
//            Matcher matcher = pattern.matcher(line);
//
//            if (matcher.find()) {
//                String timeSlot = matcher.group(1);
//                String courseName = matcher.group(2).trim();
//                String location = matcher.group(3).trim();
//                String teacher = matcher.group(4).trim();
//
//                // 清理课程名称（移除★符号）
//                courseName = courseName.replace("★", "").trim();
//
//                // 获取时间
//                LocalTime[] times = getTimeFromSlot(timeSlot);
//                if (times == null) return null;
//
//                // 获取星期几
//                int dayOfWeek = getDayOfWeek(day);
//
//                return CourseSchedule.builder()
//                        .courseName(courseName)
//                        .teacher(teacher)
//                        .location(location)
//                        .dayOfWeek(dayOfWeek)
//                        .startTime(times[0])
//                        .endTime(times[1])
//                        .build();
//            }
//        } catch (Exception e) {
//            System.err.println("解析行失败: " + line + ", 错误: " + e.getMessage());
//        }
//
//        return null;
//    }
//
//    private LocalTime[] getTimeFromSlot(String timeSlot) {
//        for (String[] slot : TIME_SLOTS) {
//            if (slot[0].equals(timeSlot)) {
//                return new LocalTime[]{
//                        LocalTime.parse(slot[1]),
//                        LocalTime.parse(slot[2])
//                };
//            }
//        }
//        return null;
//    }
//
//    private int getDayOfWeek(String day) {
//        for (int i = 0; i < DAYS_OF_WEEK.length; i++) {
//            if (DAYS_OF_WEEK[i].equals(day)) {
//                return i + 1; // 1-7对应星期一至星期日
//            }
//        }
//        return 0;
//    }
//}